package fachade;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import negocio.Campania;
import negocio.Carrier;
import negocio.Cliente;
import negocio.Cobro;
import negocio.Comprobante;
import negocio.ConceptoPorCampania;
import negocio.Empresa;
import negocio.Pago;
import dao.CampaniaDAO;
import dao.ComprobanteDAO;
import entity.CampaniaBD;
import entity.ComprobanteBD;
import entity.EmpresaBD;

public class ComprobantesFachade {

	public List<Comprobante> getComprobantesPendientesFacturar() {
		// TODO Auto-generated method stub
		return null;
	}
	
	public List<Empresa> getClientesPendientesAFacturar() {
		List<Empresa> empresas = null;
		//
		List<EmpresaBD> empresasDB = null;
		ComprobanteDAO comprobanteDAO= new ComprobanteDAO();
		empresasDB = comprobanteDAO.getClientesPendientesAFacturar();
		//
		for (Iterator iterator = empresasDB.iterator(); iterator.hasNext();) {
			if(empresas == null)
				empresas = new LinkedList<Empresa>();
			
			EmpresaBD empresaBD = (EmpresaBD) iterator.next();
			if (empresaBD.getTipo_empresa().equalsIgnoreCase("CLIENTE")){
				empresas.add(new Cliente(empresaBD));
			} else {
				empresas.add(new Carrier(empresaBD));	
			}
			
		}
		return empresas;
	}

	public List<Campania> getCampaniasCliente(Empresa empresa) throws Exception {

		CampaniaDAO campaniaDAO = new CampaniaDAO();

		List<CampaniaBD> campaniasBD = campaniaDAO.getCampaniasEmpresa(empresa);
	
		//esta es la que vamos a retornar
		List<Campania> campanias = null;
		
		if(campaniasBD != null){
			for (Iterator iterator = campaniasBD.iterator(); iterator.hasNext();) {
				CampaniaBD campaniaBD = (CampaniaBD) iterator.next();
				
				if( campanias == null )
					campanias = new LinkedList<Campania>();
	
				if( campaniaBD.getTipo().equalsIgnoreCase("Cobro") ){
					
					Campania c = new Cobro(campaniaBD);
					campanias.add(c);
				}
				else
				{
					campanias.add(new Pago(campaniaBD));
				}
					
			}
		}
		return campanias;
	}
	
	public ConceptoPorCampania getConceptosPorCampania(Integer idCampania) throws Exception {
		return PrincipalFachade.getInstance().getiConceptosFachade().getConceptoAdicionalporCampaniaId(idCampania);
	}

	public CampaniaBD getCampaniaByID(int idCampania) {
		return new CampaniaDAO().getCampaniaById(idCampania);
	}

	public Integer guardarComprobante(Comprobante nuevoComprobante) {
		ComprobanteDAO comprobanteDAO = new ComprobanteDAO();
		ComprobanteBD comprobanteBD = new ComprobanteBD(nuevoComprobante);
		return comprobanteDAO.guardarComprobante(nuevoComprobante);
	}

	public Integer getProximoNumeroComprobante() {
		return new ComprobanteDAO().getProximoNumeroComprobante();
	}

}
